package com.ys.多线程.p6线程同步Lock锁;

/**
 * 描述: 铁路公司来控制长江大桥的过车计划
 Lock是程序级别的锁，可以人为的加锁和解锁，Since JDK5

 加锁：通常在try外面，需要调用的方法lock()

 解锁：通常在finally里面,需要调用的方法unlock();

 synchronized和Lock共性和区别？

 共性：他们都能完成多线程同步，都能够确保线程安全

 区别：

 1 前者JVM级别的锁，后者程序级别的锁(可以自己加锁和解锁)

 2 synchronized起始于JDK1.0，Lock其实与JDK5

 3 synchronized是非公平锁，ABCDEFGF7个线程，此时A线程进入同步块，其他线程等待。当A离开同步块，其他线程争抢进入，不是等待时间最长的线程优先进入。

 Lock有一个公平机制，等待时间最长的线程优先进入
 * @author CodeYang
 * @version 2021/1/5 19:32
 */
public class RailwayCorporationTest {

    public static void main(String[] args) {
        // 创建长江大桥共享资源
        ChangJiangBride bride = new ChangJiangBride();

        // 创建线程任务
        DongCheTask dongCheTask = new DongCheTask(bride);
        HuoCheTask huoCheTask = new HuoCheTask(bride);
        // 创建线程
        Thread t1 = new Thread(dongCheTask);
        Thread t2 = new Thread(huoCheTask);

        t1.start();
        t2.start();




    }
}
